a1インスタンスとDocker ComposeでOdoo ERPを5分で立ち上げる
ARM64アーキテクチャのAWS Graviton ProcessorはEC2 a1インスタンスシリーズで利用可能で、従来のIntel、AMDのCPUインスタンスシリーズよりも割安で利用できます。
Graviton モデル | vCPU | メモリ (GiB) | a1料金 | c1料金 | Intel モデル |
a1.medium | 1 | 2 | 0.0255USD/h | ||
a1.large | 2 | 4 | 0.051USD/h | 0.085USD/h | c5.large |
a1.xlarge | 4 | 8 | 0.102USD/h | 0.17USD/h | c5.xlarge |
a1.2xlarge | 8 | 16 | 0.204USD/h | 0.34USD/h | c5.2xlarge |
a1.4xlarge | 16 | 32 | 0.408USD/h | 0.68USD/h | c5.4xlarge |
ARMアーキテクチャに追随しているソフトウェアといえばUbuntu+Dockerですが、ベルリンオフィスでオープンソースのERP、Odooのいくつかのアプリケーションを使う計画があり、せっかくであればa1インスタンスを使ってみようということで、Docker ComposeでOdooとPostgres DBコンテナを構築・実行しました。
サラの状態からOdooのアプリケーションにブラウザからアクセスできるようになるまで順調にいけば5分ですが、Docker Composeの導入でいくつか詰まるポイントがあるので、これからa1インスタンスをコンテナ運用や開発環境で使いたいという方へのTipsとして記述したいと思います。
a1インスタンスとUbuntu 18.04 LTS/ARM64 の起動
a1インスタンスが使えるリージョン(今回はアイルランド)でUbuntuでAMIを絞り込むと64bit (Arm)が選択できますのでそこから起動します。
これといって特筆すべきことはないのですが、Odooで使うPort 8069 をセキュリティグループで開けておきます。
a1.large、EBS 8GBで立ち上げました。
Docker CE for Ubuntuのインストール
公式ドキュメントのARM64レポジトリを選べば、特に間違えることはありません。
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=arm64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker Composeの導入
Docker Composeのレポジトリにあるバイナリは現状 Xアーキテクチャにしか対応していないので、pipを使ってソースを引っ張ってビルドする必要があります。まずpip3をインストールしましょう。
sudo apt-get install python3-pip
ではDocker Composeのインストールです。
sudo pip3 install -U docker-compose
すると以下のエラーが出てインストールできません。
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-6rmu9gtw/pynacl/
ああ、はいはい、setuptoolsが古いんでアップデートですね、と安易にアップデートしてしまうと今度は鬼のように長いエラーを吐き出してpip自体がゲシュタルト崩壊してしまいます。
色々調べると libffiとlibsslのdevバージョンを入れると python3.6-devに呼応して正しくビルドできるようになります。
sudo apt-get install libffi-dev libssl-dev
あらてめてpipでdocker-composeをインストールします。
Docker ComposeによるOdooの構成、起動
ユーザーディレクトリ直下に公式ドキュメントを参考にしたdocker-compose.yamlファイルを設置します。
version: '2' services: web: image: odoo:12.0 depends_on: - db ports: - "8069:8069" volumes: - odoo-web-data:/var/lib/odoo - ./config:/etc/odoo - ./addons:/mnt/extra-addons db: image: postgres:10 environment: - POSTGRES_DB=postgres - POSTGRES_PASSWORD=odoo - POSTGRES_USER=odoo - PGDATA=/var/lib/postgresql/data/pgdata volumes: - odoo-db-data:/var/lib/postgresql/data/pgdata volumes: odoo-web-data: odoo-db-data:
dbにPostgresのコンテナイメージを使って、そのボリュームをコンテナの外に保存する方法を取っています。将来DBを外出ししてAurora化する際もyamlの書き換えだけで対応できます。 デタッチドモードで起動します。
sudo docker-compose up -d
IPアドレスとPort 8096でブラウザからアクセスします。
データベースの初期化は起動時の画面からアドミンユーザーを作るのと同時に行います。
2 vCPUのインスタンスですが、操作感にもたつきもなく、まずは十分なスペックです。
いかがでしたでしょうか。AWSには様々なコンテナ技術とプラットフォームが使えますが、古典的にEC2インスタンス上でDockerとDocker Composeを使うならば a1インスタンスは有力な選択肢になるはずです。